import time  # 导入时间模块用于控制流程暂停
from time import process_time


class RestaurantSystem:  # 定义餐厅系统主类
    def __init__(self):  # 类初始化方法
        # 初始化桌台数据：3个桌台，每个包含状态和订单列表
        self.tables = {
            1: {"status": "空闲", "order": []},
            2: {"status": "空闲", "order": []},
            3: {"status": "空闲", "order": []}
        }

        # 初始化菜单数据：包含菜品ID、名称、价格和分类
        self.menu = [
            {"id": 1, "name": "鱼香肉丝", "price": 35, "category": "热菜"},
            {"id": 2, "name": "宫保鸡丁", "price": 42, "category": "热菜"},
            {"id": 3, "name": "酸辣汤", "price": 20, "category": "汤类"},
            {"id": 4, "name": "米饭", "price": 3, "category": "主食"}
        ]

    def show_main_menu(self):  # 主菜单显示
        print("\n===== 餐厅点餐系统 =====")
        print("|  1. 查看所有桌台状态   ")
        print("|  2. 开始新订单        ")
        print("|  3. 添加菜品到订单     ")
        print("|  4. 查看当前订单       ")
        print("|  5. 结账             ")
        print("|  6. 退出系统          ")
        print("=======================")
        return input("请输入选项：")  # 获取用户输入

    def show_tables(self):  # 显示桌台状态
        print("\n===== 桌台状态 =====")
        for table_id, info in self.tables.items():  # 遍历所有桌台
            print(f"桌号 {table_id} - 状态: {info['status']}")
        print("===================")

    def show_menu(self):  # 显示菜单
        print("\n====== 今日菜单 ======")
        for item in self.menu:  # 遍历所有菜品
            print(f"{item['id']}. {item['name']} ({item['category']}) ￥{item['price']}")
        print("====================")

    def create_order(self):  # 创建新订单
        self.show_tables()
        try:
            table_id = int(input("请选择桌号："))  # 转换输入为整数
            # 验证桌号有效性
            if table_id not in self.tables:
                print("无效的桌号！")
                return

            # 检查桌台是否可用
            if self.tables[table_id]["status"] != "空闲":
                print("该桌已有订单！")
                return

            self.tables[table_id]["status"] = "使用中"  # 更新状态
            print(f"\n桌号 {table_id} 的订单已创建")
            return table_id  # 返回当前操作的桌号
        except ValueError:  # 处理非数字输入
            print("请输入有效数字！")

    def add_to_order(self, table_id):  # 添加菜品到订单
        self.show_menu()
        try:
            item_id = int(input("请输入菜品编号："))
            # 使用生成器表达式查找对应菜品
            selected = next((item for item in self.menu if item["id"] == item_id), None)

            if selected:  # 如果找到菜品
                self.tables[table_id]["order"].append(selected)
                print(f"已添加 {selected['name']} 到订单")
            else:
                print("无效的菜品编号！")
        except ValueError:
            print("请输入有效数字！")

    def show_current_order(self, table_id):  # 显示当前订单
        order = self.tables[table_id]["order"]
        if not order:  # 空订单检查
            print("当前没有菜品")
            return

        print(f"\n==== 桌号 {table_id} 的订单 ====")
        total = 0  # 总金额计算
        for item in order:
            print(f"{item['name']} ￥{item['price']}")
            total += item['price']
        print(f"总计：￥{total}")
        print("=====================")

    def checkout(self, table_id):  # 结账功能
        order = self.tables[table_id]["order"]
        if not order:
            print("没有需要结账的订单")
            return

        total = sum(item["price"] for item in order)  # 使用生成器表达式计算总和
        print(f"\n=== 桌号 {table_id} 账单 ===")
        self.show_current_order(table_id)
        print("\n感谢惠顾！")

        # 重置桌台状态
        self.tables[table_id]["status"] = "空闲"
        self.tables[table_id]["order"] = []

    def run(self):  # 主程序循环
        print("餐厅系统已启动！")
        current_table = None  # 跟踪当前操作的桌号
        while True:  # 无限循环直到退出
            choice = self.show_main_menu()

            # 选项处理逻辑
            if choice == "1":
                self.show_tables()
            elif choice == "2":
                current_table = self.create_order()
            elif choice == "3":
                if not current_table:  # 验证是否已选择桌号
                    print("请先选择桌号创建订单！")
                    continue
                self.add_to_order(current_table)
            elif choice == "4":
                if not current_table:
                    print("请先选择桌号！")
                    continue
                self.show_current_order(current_table)
            elif choice == "5":
                if not current_table:
                    print("请先选择桌号！")
                    continue
                self.checkout(current_table)
                current_table = None  # 结账后重置当前桌号
            elif choice == "6":
                print("系统退出...")
                print("感谢您的惠顾，欢迎下次光临！")
                break
            else:
                print("无效的选项，请重新输入！")

            time.sleep(2)  # 每次操作后暂停2秒


if __name__ == "__main__":  # 程序入口
    system = RestaurantSystem()  # 实例化系统
    system.run()  # 启动主循环